package com.zmn.brs.services.impl.record;

import com.zmn.brs.model.entity.record.EventRecord;
import com.zmn.brs.model.entity.record.EventRecordQuery;
import com.zmn.brs.model.query.record.ObjectiveRecordCustom;
import com.zmn.brs.model.query.record.ObjectiveRecordCustomQuery;
import com.zmn.brs.model.query.record.OrderRecordCustom;
import com.zmn.brs.model.query.record.OrderRecordCustomQuery;
import com.zmn.brs.persistence.interfaces.record.EventRecordDao;
import com.zmn.brs.services.interfaces.record.EventRecordService;
import com.zmn.manager.common.database.annotation.ReadOnlyConnection;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;

import javax.annotation.Resource;
import java.util.List;

/**
 * 描述: 触发事件基础接口实现类
 *
 * @author xujie
 * @since  2021-03-17 13:55:07
 **/
@Slf4j
@Service
public class EventRecordServiceImpl implements EventRecordService {

    private static final String TAG = "触发事件基础服务接口";

    @Resource
    private EventRecordDao eventRecordDao;

    /**
     * 描述: 根据id查询数据
     *
     * @param recordId id
     * @author xujie
     * @since 2021-03-17 13:55:07
     **/
    @Override
    @ReadOnlyConnection
    public EventRecord findById(Integer recordId) {

        Assert.notNull(recordId, TAG + "参数 recordId 不能为空");
        return eventRecordDao.findById(recordId);
    }

    /**
     * 描述: 按条件查询数据 支持分页
     *
     * @param query 查询对象
     * @author xujie
     * @since 2021-03-17 13:55:07
     **/
    @Override
    @ReadOnlyConnection
    public List<EventRecord> listPageByQuery(EventRecordQuery query) {

        Assert.notNull(query, TAG + "参数 query 不能为空");
        query.setTotalCount(eventRecordDao.countByQuery(query));
        return eventRecordDao.listPageByQuery(query);
    }

    /**
     * 描述: 按条件查询绩效监控数据 支持分页
     * @param query 查询对象
     * @return List<ObjectiveRecordCustom>
     * @author chongw
     * @since 2021-06-10 14:55:07
     **/
    @Override
    @ReadOnlyConnection
    public List<ObjectiveRecordCustom> listObjectiveRecordPageByQuery(ObjectiveRecordCustomQuery query){
        Assert.notNull(query, TAG + "参数 query 不能为空");
        query.setTotalCount(eventRecordDao.countObjectiveRecordPageByQuery(query));
        return eventRecordDao.listObjectiveRecordPageByQuery(query);
    }

    /**
     * 描述: 按条件查询订单监控数据 支持分页
     * @param query 查询对象
     * @return List<OrderRecordCustomQuery>
     * @author chongw
     * @since 2021-06-26 14:55:07
     **/
    @Override
    @ReadOnlyConnection
    public  List<OrderRecordCustom> listOrderRecordPageByQuery(OrderRecordCustomQuery query){
        Assert.notNull(query, TAG + "参数 query 不能为空");
        query.setTotalCount(eventRecordDao.countOrderRecordPageByQuery(query));
        return eventRecordDao.listOrderRecordPageByQuery(query);
    }

    /**
     * 描述: 按条件查询数据 不支持分页
     *
     * @param query 查询对象
     * @author xujie
     * @since 2021-03-17 13:55:07
     **/
    @Override
    @ReadOnlyConnection
    public List<EventRecord> listByQuery(EventRecordQuery query) {

        Assert.notNull(query, TAG + "参数 query 不能为空");
        return eventRecordDao.listByQuery(query);
    }

    /**
     * 描述: 按条件查询数据 不支持分页
     *
     * @param query 查询对象
     * @author xujie
     * @since 2021-03-17 13:55:07
     **/
    @Override
    @ReadOnlyConnection
    public Integer countByQuery(EventRecordQuery query) {

        Assert.notNull(query, TAG + "参数 query 不能为空");
        return eventRecordDao.countByQuery(query);
    }

    /**
     * 描述: 根据id修改数据 id为必传
     *
     * @param eventRecord 待修改数据
     * @return java.lang.Integer
     * @author xujie
     * @since 2021-03-17 13:55:07
     **/
    @Override
    public Integer updateByKey(EventRecord eventRecord) {

        Assert.notNull(eventRecord, TAG + "参数 eventRecord 不能为空");
        Assert.notNull(eventRecord.getRecordId(), TAG + "字段 recordId 不能为空");
        return eventRecordDao.updateByKey(eventRecord);
    }

    /**
     * 描述: 批量修改数据
     * @param eventRecordList 数据集合
     * @return java.lang.Integer 成功个数
     * @author xujie
     * @since  2021-03-17 13:55:07
     */
    @Override
    public Integer updateBatchByKey(List<EventRecord> eventRecordList) {

        if (eventRecordList == null || eventRecordList.size() == 0) {
            return null;
        }
        return eventRecordDao.updateBatchByKey(eventRecordList);
    }

    /**
     * 描述: 新增数据
     *
     * @param eventRecord 待新增数据
     * @return java.lang.Integer 主键key
     * @author xujie
     * @since  2021-03-17 13:55:07
     **/
    @Override
    public Integer insert (EventRecord eventRecord) {

        Assert.notNull(eventRecord, TAG + "参数 eventRecord 不能为空");
        return eventRecordDao.insert(eventRecord);
    }

    /**
     * 描述: 批量新增数据
     * @param eventRecordList 待新增数据集合
     * @return java.lang.Integer 成功个数
     * @author xujie
     * @since  2021-03-17 13:55:07
     */
    @Override
    public Integer insertBatch(List<EventRecord> eventRecordList) {

        if (eventRecordList == null || eventRecordList.size() == 0) {
            return null;
        }
        return eventRecordDao.insertBatch(eventRecordList);
    }

    /**
     * 描述: 根据主键删除数据
     *
     * @param recordId 主键
     * @return 执行结果码
     * @author xujie
     * @since 2021-03-17 13:55:07
     */
    @Override
    public Integer deleteByKey(Integer recordId) {

        Assert.notNull(recordId, TAG + "参数 recordId 不能为空");
        return eventRecordDao.deleteByKey(recordId);
    }

    /**
     * 描述: 根据主键批量删除数据
     *
     * @param recordIdList 待新增数据集合
     * @return java.lang.Integer 成功个数
     * @author xujie
     * @since  2021-03-17 13:55:07
     */
    @Override
    public Integer deleteBatchByKey(List<Integer> recordIdList) {

        if (recordIdList == null || recordIdList.size() == 0) {
            return null;
        }
        return eventRecordDao.deleteBatchByKey(recordIdList);
    }

}